#include "klasy.h"


using namespace std;

Pojazd::Pojazd(char nazwa[DLUGOSC], int wag) :waga(wag){
	strcpy(nazwaProducenta, nazwa);
}
Pojazd::~Pojazd(){
	cout << "MAMAMAMMAMAMA"<<endl;}

void Pojazd::wypisz() {
	cout << "Nazwa producenta: " << nazwaProducenta << " " << ", waga: " << waga << endl;
}

Data::Data(int d, int r, char m[DLUGOSCC]) :dzien(d), rok(r) {
	strcpy(miesiac, m);
}

void Data::wypisz() {
	cout << "Data: " << dzien << " " << miesiac << " " << rok << endl;
}

Data & Data::operator=(const Data &that) {
	if (&that == this) return *this;

	dzien = that.dzien;
	rok = that.rok;
	strcpy(miesiac, that.miesiac);

	return *this;
}

Data::~Data(){}

Samochod::Samochod(Data *przegladyTechniczne, int lpas, int ilprz, char nazpr[DLUGOSC], int wag) : Pojazd(nazpr, wag), liczbaPasazerow(lpas), iloscPrzegladow(ilprz) {
	this->przegladyTechniczne = new Data[ilprz];
}

Samochod::Samochod(Samochod &that) : Pojazd(that.nazwaProducenta, that.waga), liczbaPasazerow(that.liczbaPasazerow), iloscPrzegladow(that.iloscPrzegladow) {
	this->przegladyTechniczne = new Data[that.iloscPrzegladow];
}

Samochod & Samochod::operator=(const Samochod &that) {
	if (&that == this) return *this;

	delete[] przegladyTechniczne;

	liczbaPasazerow = that.liczbaPasazerow;
	iloscPrzegladow = that.iloscPrzegladow;
	strcpy(nazwaProducenta, that.nazwaProducenta);
	waga = that.waga;
	przegladyTechniczne = new Data[iloscPrzegladow];

	for (int i = 0; i < iloscPrzegladow; i++)
	{
		przegladyTechniczne[i] = that.przegladyTechniczne[i];

	}
	return *this;
}
Samochod::~Samochod() {
	delete[] przegladyTechniczne;
}
void Samochod::dodajDate(Data *obiekt) {
	Data *tablica = new Data[iloscPrzegladow + 1];
	tablica[iloscPrzegladow] = *obiekt;

	for (int i = 0; i < iloscPrzegladow; i++) {
		tablica[i] = przegladyTechniczne[i];
	}

	delete[] przegladyTechniczne;
	przegladyTechniczne = tablica;
	iloscPrzegladow++;
}

Motor::Motor(char prod[DLUGOSC], char nazpr[DLUGOSC], int wag) : Pojazd(nazpr, wag) {
	strcpy(producent, prod);
}

Motor::~Motor(){
	cout << "MOTOR SE JEDZIE" << endl;
}

Ciezarowka::Ciezarowka(char nr[DLUGOSC], char nazpr[DLUGOSC], int wag) : Pojazd(nazpr, wag) {
	strcpy(nrViaTool, nr);
}

Ciezarowka::~Ciezarowka(){}

void Motor::wypisz() {
	cout << "Producent: " << producent << ", nazwa producenta(to samo co producent?): " << nazwaProducenta << ", waga: " << waga << endl;
}

void Ciezarowka::wypisz() {
	cout << "Nr viatool: " << nrViaTool << ", nazwa producenta: " << nazwaProducenta << ", waga: " << waga << endl;
}

void Samochod::wypisz() {
	cout << "Liczba pasazerow: " << liczbaPasazerow << ", nazwa producenta): " << nazwaProducenta << ", waga: " << waga << endl;
	cout << "Przeglady: " << endl;
	for (int i = 0; i < iloscPrzegladow; i++) {
		przegladyTechniczne[i].wypisz();
	}
}

void Kontener::dodaj(Pojazd* obiekt) {
	if (iloscDodanych == DLUGOSCC) {
		cout << "jest full" << endl;
	}
	else {
		tablicaPojazdow[iloscDodanych] = obiekt;
		iloscDodanych++;
	}
}

Pojazd* Kontener::pobierzPierwszy() {
	aktualnieZwracany = 1;
	return tablicaPojazdow[0];
}

Pojazd* Kontener::pobierzNastepny() {
	if (iloscDodanych == 0) {
		return NULL;
	}
	else if (aktualnieZwracany == iloscDodanych) {
		return pobierzPierwszy();
	}
	else{
		return tablicaPojazdow[aktualnieZwracany++];
	}

}

bool Kontener::czyPierwszy() {
	return aktualnieZwracany == 0;
}

void Kontener::usunBiezacy() {

	if (iloscDodanych > 0) {
		for (int i = aktualnieZwracany; i<iloscDodanych - 1; i++) {
			tablicaPojazdow[i] = tablicaPojazdow[i + 1];
			tablicaPojazdow[i + 1] = NULL;

		}
		iloscDodanych--;
	}
}
